package com.EAsystem.service.Impl;

import com.EAsystem.entity.CourseSelection;
import com.EAsystem.entity.CourseSchedule;
import com.EAsystem.mapper.CourseSelectionMapper;
import com.EAsystem.mapper.CourseScheduleMapper;
import com.EAsystem.service.CourseSelectionService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.ArrayList;

/**
 * 选课服务实现类
 */
@Service
public class CourseSelectionServiceImpl implements CourseSelectionService {
    @Autowired
    private CourseSelectionMapper courseSelectionMapper;
    
    @Autowired
    private CourseScheduleMapper courseScheduleMapper;

    /**
     * 查询所有选课记录
     * @return 选课记录列表
     */


    /**
     * 根据ID查询选课记录
     * @param id 选课记录ID
     * @return 选课记录
     */
    @Override
    public CourseSelection findById(Integer id) {
        return courseSelectionMapper.findById(Long.valueOf(id));
    }

    /**
     * 根据学生ID查询选课记录
     * @param studentId 学生ID
     * @return 选课记录列表
     */
    @Override
    public List<CourseSelection> findByStudentId(Long studentId) {
        List<CourseSelection> selections = courseSelectionMapper.findByStudentId(studentId);
        return selections;
    }

    /**
     * 根据课程ID查询选课记录
     * @param courseId 课程ID
     * @return 选课记录列表
     */
    @Override
    public List<CourseSelection> findByCourseId(Long courseId) {
        return courseSelectionMapper.findByCourseId(courseId);
    }

    /**
     * 根据学生ID和课程ID查询选课记录
     * @param studentId 学生ID
     * @param courseId 课程ID
     * @return 选课记录
     */
    @Override
    public CourseSelection findByStudentIdAndCourseId(Long studentId, Long courseId) {
        return courseSelectionMapper.findByStudentIdAndCourseId(studentId, courseId);
    }

    /**
     * 添加选课记录
     * @param courseSelection 选课记录
     * @return 添加结果（影响行数）
     */
    @Override
    @Transactional
    public int add(CourseSelection courseSelection) {
        // 设置创建时间和更新时间
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String currentTime = sdf.format(new Date());
        courseSelection.setCreateTime(currentTime);
        courseSelection.setUpdateTime(currentTime);

        // 设置默认状态为待审核(0)
        if (courseSelection.getStatus() == null) {
            courseSelection.setStatus(0);
        }

        return courseSelectionMapper.add(courseSelection);
    }

    /**
     * 更新选课记录状态
     * @param id 选课记录ID
     * @param status 状态（0-待审核，1-已选课，2-已退课）
     * @param updateTime 更新时间
     * @return 更新结果（影响行数）
     */
    @Override
    @Transactional
    public int updateStatus(Long id, Integer status, String updateTime) {
        return courseSelectionMapper.updateStatus(id, status, updateTime);
    }

    /**
     * 删除选课记录
     * @param id 选课记录ID
     * @return 删除结果（影响行数）
     */
    @Override
    @Transactional
    public int delete(Integer id) {
        return courseSelectionMapper.delete(Long.valueOf(id));
    }

    /**
     * 分页查询选课记录
     * @param pageNum 页码
     * @param pageSize 每页记录数
     * @return 分页信息
     */
    @Override
    public PageInfo<CourseSelection> findByPage(int pageNum, int pageSize) {
        PageHelper.startPage(pageNum, pageSize);
        List<CourseSelection> list = courseSelectionMapper.findAll();
        return new PageInfo<>(list);
    }

    /**
     * 根据学生ID分页查询选课记录
     * @param studentId 学生ID
     * @param pageNum 页码
     * @param pageSize 每页记录数
     * @return 分页信息
     */
    @Override
    public PageInfo<CourseSelection> findByStudentIdWithPage(Integer studentId, int pageNum, int pageSize) {
        PageHelper.startPage(pageNum, pageSize);
        List<CourseSelection> list = courseSelectionMapper.findByStudentId(Long.valueOf(studentId));
        return new PageInfo<>(list);
    }

    /**
     * 根据课程ID分页查询选课记录
     * @param courseId 课程ID
     * @param pageNum 页码
     * @param pageSize 每页记录数
     * @return 分页信息
     */
    @Override
    public PageInfo<CourseSelection> findByCourseIdWithPage(Integer courseId, int pageNum, int pageSize) {
        PageHelper.startPage(pageNum, pageSize);
        List<CourseSelection> list = courseSelectionMapper.findByCourseId(Long.valueOf(courseId));
        return new PageInfo<>(list);
    }
}